"""
三阶段_第一章01_pyspark基础操作
里面说了 pyspark编程.主要有三大步骤

这里来说明 数据输入的操作
"""
"""
RDD对象
支持多种数据的输入,在输入完成后.都会得到一个: RDD类的对象
RDD全称: 弹性分布式数据集 (Resilient Distributed Datasets )
PySpark 针对数据处理,都是以RDD对象作为载体,即:
数据存储在RDD内
各种数据计算方法,也都是RDD的成员方法
RDD的数据计算方法,返回值依旧是RDD对象
"""
"""
pyspark 通过SparkContex对象,里的 parallelize 成员方法,将:
python的数据各类型,转换成为RDD对象

特别注意:
字符串会被拆分出1个个的字符,存入RDD对象
字典只有key(密钥)被存入RDD对象
"""
# 导包
from pyspark import SparkConf, SparkContext

# 创建SparkConf类对象  (设置了任务模式和名称)
对象 = SparkConf()
对象.setMaster("local[*]")
对象.setAppName("这里自定义名称")

# 基于SparkConf类的对象,创建SparkContext类的对象
入口对象 = SparkContext(conf=对象)  # 括号里不加,也可以

# -----------上面的方法每次都是要操作的----------------------

# 通过 parallelize 方法,把 python 数据/对象 ,加载到 pyspark 里.成为RDD对象
rdd1 = 入口对象.parallelize([1, 2, 44])  # 列表传进去
rdd2 = 入口对象.parallelize("孙新罡")  # 字符串
rdd3 = 入口对象.parallelize((77, 33, 6))  # 元组
rdd4 = 入口对象.parallelize({1, 2, 3})  # 集合
rdd5 = 入口对象.parallelize({"密钥1": 22, "密钥2": 33})  # 字典

# 说明如果想看RDD里面的数据,是不能直接查看的.需要通过里面的 collect() 成员方法来查看
print(rdd1.collect(), type(rdd1.collect()))
print(rdd2.collect(), type(rdd1.collect()))
print(rdd3.collect(), type(rdd1.collect()))
print(rdd4.collect(), type(rdd1.collect()))
print(rdd5.collect(), type(rdd1.collect()))
# 特别注意:  通过输出可以看出来  类型都是列表
# 字符串会被拆分出1个个的字符,存入RDD对象
# 字典只有key(密钥)被存入RDD对象

"""
PySpark 也支持通过 SparkContext 入口对象,来读取文件,来构建RDD对象
"""
# 通过 parallelize 方法,读取文件数据 ,加载到 pyspark 里.成为RDD对象
文件RDD = 入口对象.textFile("C:/Users/sxingang/Desktop/新建文本文档.txt")  # 括号里的是文件路径

# 打印输出RDD对象内容,看看RDD数据类型是. 要加 collect()
print(文件RDD.collect(), type(文件RDD.collect()))

# 停止 SparkContext 对象的运行 (停止 pyspark 程序)
入口对象.stop()

"""
以上介绍了2种通过成员方法,输入数据到 spark (即得到RDD对象),的方法
"""